home *** CD-ROM | disk | FTP | other *** search
/ Info-Mac 1992 August / info-mac-1992.iso / Applications (app) / STvi / stevie 3.10 / crt0.asm < prev    next >
Assembly Source File  |  1991-01-03  |  3KB  |  168 lines

  1. ; 32-bit clean version of crt0.asm for Aztec C, v 3.6c.
  2. ; Reference, Technote #212.
  3. ; Don't walk the resource map, don't mask pointers, don't write
  4. ; to your code block.
  5. ; Earle R. Horton 4/10/89
  6.  
  7. saveH    EQU    0    ; Stack frame vars
  8.  
  9. CurJtOffset    equ    $0934
  10.  
  11.     macro    _GetResource
  12.     dc.w    $A9A0
  13.     endm
  14.     macro    _DetachResource
  15.     dc.w    $A992
  16.     endm
  17.     macro    _LoadResource
  18.     dc.w    $A9A2
  19.     endm
  20.     macro    _StripAddress
  21.     dc.w    $A055
  22.     endm
  23.     macro    _GetTrapAddress
  24.     dc.w    $A146|%1
  25.     endm
  26.     macro    _Debugger
  27.     dc.w    $A9FF
  28.     endm
  29.     macro    _BlockMove
  30.     dc.w    $A02E
  31.     endm
  32.     macro    _ReleaseResource
  33.     dc.w    $A9A3
  34.     endm
  35.     macro    _HLock
  36.     dc.w    $A029
  37.     endm
  38.     macro    _GetHandleSize
  39.     dc.w    $A025
  40.     endm
  41. StripAddressTrap    equ    $0055
  42. UnimplementedTrap    equ    $009F
  43. newOS            equ    $0200
  44. newTool            equ    $0600
  45. ROM85            equ    $028E
  46.  
  47.     public    __Dorg
  48.     public    __Uorg
  49.     public    __Uend
  50.     public    _Croot
  51.     entry    .begin
  52.     public    .begin    
  53.     public    _UnloadSeg
  54. .begin
  55.     LINK    A6,#saveH
  56.     SUBQ    #4,A7
  57.     MOVE.L  #'CODE',D3        ; D3 = 'CODE'
  58.     MOVE.L  D3,-(sp)
  59.     MOVE.W    #1,-(sp)
  60.     _GetResource
  61.     MOVE.L   (sp)+,A2
  62.     MOVE.L  (A2),D6            ; D6 = start of 'CODE' 1
  63.     tst.w    ROM85            ; Check for _NGetTrapAddress
  64.     bmi.s    stripit            ; pre-128k ROMs
  65.     move.w    #StripAddressTrap,d0    ; Check for _StripAddress trap.
  66.     _GetTrapAddress    newOS
  67.     MOVE.L    A0,A1
  68.     move.w    #UnimplementedTrap,d0
  69.     _GetTrapAddress    0
  70.     CMPA.L    A1,A0
  71.     BEQ.S    stripit            ; No StripAddress
  72.     MOVE.L    D6,D0
  73.     _StripAddress
  74.     MOVE.L    D0,D6
  75.     BRA.S    stripped
  76. stripit
  77.     AND.L   #$FFFFFF,D6        ; Mask low 3 bytes.
  78. stripped
  79.     SUBQ    #4,A7        ; Load initialized data from 'CODE' 256.
  80.     MOVE.L    D3,-(sp)
  81.     move.w    #256,-(sp)
  82.     _GetResource
  83.     movea.l    (sp),a2
  84.     move.l    a2,d0
  85.     beq.s    do257
  86.     _LoadResource
  87.     movea.l    a2,a0
  88.     _HLock
  89.     movea.l    a2,a0
  90.     _GetHandleSize
  91.     move.l    (a2),a0
  92.     movea.l    a5,a1
  93.     suba.l    #(__Uend-__Dorg),a1
  94.     _BlockMove
  95.     move.l    a2,-(sp)
  96.     _ReleaseResource
  97.     
  98. do257
  99.     ADDQ.L  #4,D6
  100.     
  101.     subq    #4,sp        ;; Load relocation data from 'CODE' 257.
  102.     move.l    D3,-(sp)
  103.     move.w    #257,-(sp)
  104.     _GetResource
  105.     move.l    (sp),D3        ; D3 = Handle to 'CODE' 257
  106.     beq.s    clear_udata
  107.     _LoadResource
  108.     move.l    D3,a0
  109.     _GetHandleSize
  110.     tst.l    d0
  111.     beq    clear_udata
  112.     movea.l    (a2),a1        ; a1 -> start of relocation data
  113.  
  114.     MOVEA.L A5,A2
  115.     MOVE.L  A5,D4
  116.     BSR.S   relocate
  117.     MOVE.L  D6,D4
  118.     BSR.S   relocate
  119.     MOVEA.L D6,A2
  120.     MOVE.L  A5,D4
  121.     BSR.S   relocate
  122.     MOVE.L  D6,D4
  123.     BSR.S   relocate
  124.     LEA     4(A5),A3
  125.     ADDA.W  CurJtOffset,A3
  126.     move.l    (a1)+,d1
  127.     BMI.S   clear_udata
  128. loop1    move.l    (a1)+,d2
  129.     ADD.L   D6,D2
  130.     MOVE.L  D2,(A3)
  131.     ADDQ.L  #8,A3
  132.     DBRA    D1,loop1
  133. clear_udata
  134.     MOVE.L  #((__Uend-__Uorg)/2)-1,D0
  135.     BMI.S   cleanup
  136.     MOVEA.L A5,A0
  137.     SUBA.L  #(__Uend-__Uorg),A0
  138. loop2    CLR     (A0)+
  139.     DBRA    D0,loop2
  140. cleanup
  141.     tst.l    D3
  142.     beq.s    done
  143.     move.l    D3,-(sp)
  144.     _ReleaseResource
  145. done
  146.     SUBQ    #4,A7
  147.     MOVE.L  #'CODE',(sp)
  148.     CLR.W    -(sp)
  149.     _GetResource
  150.     _ReleaseResource
  151.     UNLK    A6
  152.     JMP     _Croot
  153.     UNLK    A6
  154.     RTS
  155.     DC.B    'crt0    '
  156.  
  157. relocate
  158.     move.l    (a1)+,d0
  159.     BMI.S   lac_2
  160. lac_1   move.l    (a1)+,d1
  161.     ADD.L   D4,0(A2,D1.L)
  162.     DBRA    D0,lac_1
  163. lac_2    RTS
  164.  
  165. _UnloadSeg
  166.     DC.W    $ADF1
  167.     end
  168.